/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.cliente;

import com.mindbox.mueblesalpes.negocio.cliente.ClienteServiceLocal;
import com.mindbox.mueblesalpes.negocio.persistence.ClientePersistenceMock;
import com.mindbox.mueblesalpes.negocio.persistence.IClientePersistence;
import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.TipoDocumento;
import com.mindbox.mueblesalpes.negocio.entity.TipoUsuario;
import com.mindbox.mueblesalpes.negocio.entity.Usuario;
import com.mindbox.mueblesalpes.negocio.geo.Ciudad;
import com.mindbox.mueblesalpes.negocio.geo.Departamento;
import com.mindbox.mueblesalpes.negocio.geo.Pais;
import com.mindbox.mueblesalpes.negocio.persistence.IUsuario;
import com.mindbox.mueblesalpes.negocio.persistence.UsuarioMock;
import com.mindbox.mueblesalpes.negocio.usuario.UsuarioServiceLocal;
import com.mindbox.mueblesalpes.negocio.utilidades.IUtilidades;
import com.mindbox.mueblesalpes.negocio.utilidades.UtilidadesMock;
import com.mindbox.mueblesalpes.presentacion.sesion.SessionInfo;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import com.mindbox.mueblesalpes.presentacion.utils.ReglasNavegacion;
import com.mindbox.mueblesalpes.presentacion.utils.RequestParameters;
import java.util.Map;
import java.util.TreeMap;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Diana Carolina
 */

public class ClienteBean {
    ClientePersistenceMock cliente;
    Mensajes mensaje;
    IUtilidades utilidades;
    String tipoDocumento;
    String numeroDocumento;
    String nombreCompleto;
    String telefonoResidencia;
    String celular;
    String direccion;
    String ciudadResidencia;
    String profesion;
    String email;
    String departamento;
    String pais;
    String tipoUsuario;
    String nombreUsuario;
    String password;
    @EJB
    private ClienteServiceLocal clienteEjb;
    @EJB
    private UsuarioServiceLocal usuarioEjb;

    /** Creates a new instance of ClienteBean */
    public ClienteBean() {
        mensaje = new Mensajes();
        cliente = new ClientePersistenceMock();
        utilidades = new UtilidadesMock();
   
    }
    public Map getListaTiposDocumento(){
        Map tipoDoc = new TreeMap();
        tipoDoc.put("", "Seleccionar");
        //tipoDoc.put("cedula", "CEDULA");
        for(Object o: utilidades.consultarTipoDocumento()){
            tipoDoc.put(o.toString(), o.toString());
        }
        return tipoDoc;
    }
    public Map getListaPaises(){
        Map paises = new TreeMap();
        paises.put("", "Seleccionar");
        for(Object o: utilidades.consultarPaises()){
            paises.put(o.toString(), o.toString());
        }
        return paises;

    }
    public Map getListaCiudades(){
        Map ciudades = new TreeMap();
        ciudades.put("", "Seleccionar");
        for(Object o: utilidades.consultarCiudades()){
            ciudades.put(o.toString(), o.toString());
        }
        return ciudades;
    }
    public Map getListaDepartamento(){
        Map departamentos = new TreeMap();
        departamentos.put("", "Seleccionar");
        for(Object o: utilidades.consultarDepartamentos()){
            departamentos.put(o.toString(), o.toString());
        }
        return departamentos;
    }
    public Map getTiposUsuario(){
        /**
         * Se obtiene la sesion para verificar si el llamado a esta pagina viene
         * desde el carrito de compras.
         */
        HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        String next = null;
        if(sesion != null)
            next = (String)sesion.getAttribute(RequestParameters.next_page.name());

        Map tiposUsuario = new TreeMap();
        tiposUsuario.put("", "Seleccionar");
        for(Object o: utilidades.consultarTipoUsuarios()){
            if(next != null && !o.toString().equals(TipoUsuario.ADMINISTRADOR.name()))
                tiposUsuario.put(o.toString(), o.toString());
            else if( next == null )
                tiposUsuario.put(o.toString(), o.toString());
        }
        return tiposUsuario;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getCiudadResidencia() {
        return ciudadResidencia;
    }

    public void setCiudadResidencia(String ciudadResidencia) {
        this.ciudadResidencia = ciudadResidencia;
    }

    

    public String getDepartamento() {
        return departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNombreCompleto() {
        return nombreCompleto;
    }

    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public String getProfesion() {
        return profesion;
    }

    public void setProfesion(String profesion) {
        this.profesion = profesion;
    }

    public String getTelefonoResidencia() {
        return telefonoResidencia;
    }

    public void setTelefonoResidencia(String telefonoResidencia) {
        this.telefonoResidencia = telefonoResidencia;
    }

    public String getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(String tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }
     public String getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(String tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }
    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    

    public String crear() {
        try {
            Cliente clienteNuevo = new Cliente();
            Ciudad ciudad = new Ciudad();
            ciudad.setNombre(ciudadResidencia);
            Departamento deptoO = new Departamento();
            Pais paisO = new Pais();
            deptoO.setNombre(departamento);
            paisO.setPais(pais);
            deptoO.setPais(paisO);
            ciudad.setDepartamento(deptoO);

            if (tipoDocumento.equals(TipoDocumento.CEDULA.toString())) {
                clienteNuevo.setTipoDocumento(TipoDocumento.CEDULA);
            }
            if (tipoDocumento.equals(TipoDocumento.NIT.toString())) {
                clienteNuevo.setTipoDocumento(TipoDocumento.NIT);
            }
            clienteNuevo.setNumeroDocumento(numeroDocumento);
            clienteNuevo.setNombreCompleto(nombreCompleto);
            clienteNuevo.setTelefonoResidencia(telefonoResidencia);
            clienteNuevo.setCelular(celular);
            clienteNuevo.setDireccion(direccion);
            clienteNuevo.setProfesion(profesion);
            clienteNuevo.setCiudadResidencia(ciudad);
            clienteNuevo.setEmail(email);
            if(clienteEjb.crearCliente(clienteNuevo)){
                mensaje.asignarMensajeInfo("insert.cliente.info");
            }else{
                mensaje.asignarMensajeError("insert.cliente.error");
            }
            this.limpiarCampos();
        } catch (Exception e) {
            e.printStackTrace();
            mensaje.asignarMensajeError("insert.cliente.error");
        }

        return ReglasNavegacion.crear_datos_usuario.toString();

    }

    public String crearUsuario() {
        try {
            Usuario usuario = new Usuario();
            if (tipoUsuario.equals(TipoUsuario.ADMINISTRADOR.toString())) {
                usuario.setTipoUsuario(TipoUsuario.ADMINISTRADOR);
            } else {
                usuario.setTipoUsuario(TipoUsuario.CLIENTE);
            }
            usuario.setUsuario(nombreUsuario);
            usuario.setPwd(password);
            if(usuarioEjb.crearUsuario(usuario)){
                HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
                String next = null;
                if(sesion != null)
                    next = (String)sesion.getAttribute(RequestParameters.next_page.name());
                if(next != null){
                    //TODO Se debe crear el usuario y el cliente en la sesión.
                    SessionInfo sesionInfo = (SessionInfo)sesion.getAttribute(SessionInfo.class.getName());
                    if(sesionInfo == null){
                        sesionInfo = new SessionInfo();
                        sesion.setAttribute(SessionInfo.class.getName(), sesionInfo);
                    }
                    Cliente cliente = new Cliente();
                    cliente.setNombreCompleto("Harry");
                    cliente.setNombreCompleto("Plotter");
                    sesionInfo.setUsuario(usuario);
                    sesionInfo.setCliente(cliente);
                    sesion.removeAttribute(RequestParameters.next_page.name());
                    return next;
                }else
                    mensaje.asignarMensajeInfo("insert.usuario.infoCreacion");
            }else{
                mensaje.asignarMensajeError("insert.errorUsuario");
            }
            
        } catch (Exception e) {
            System.err.println("Error al insertar un usuario:"+e.getMessage());
            e.printStackTrace();
            mensaje.asignarMensajeError("insert.errorUsuario");
        }
        this.limpiarCampos();
        return "";
    }
    public String cancelar(){
        return ReglasNavegacion.insert_clientes.toString();
    }
    public void limpiarCampos(){
        this.setTipoDocumento("");
        this.setNumeroDocumento("");
        this.setNombreCompleto("");
        this.setTelefonoResidencia("");
        this.setCelular("");
        this.setCiudadResidencia("");
        this.setProfesion("");
        this.setEmail("");
        this.setDepartamento("");
        this.setPais("");
        this.setTipoUsuario("");
        this.setNombreUsuario("");
        this.setPassword("");
        this.setDireccion("");
     }
}
